{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import pandas as pd  \n",
    "from matplotlib import pyplot as plt \n",
    "from mpl_toolkits.mplot3d import Axes3D"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ID</th>\n",
       "      <th>density</th>\n",
       "      <th>Sugar_content</th>\n",
       "      <th>label</th>\n",
       "      <th>intercept</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0.697</td>\n",
       "      <td>0.460</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0.774</td>\n",
       "      <td>0.376</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>0.634</td>\n",
       "      <td>0.264</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>0.608</td>\n",
       "      <td>0.318</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0.556</td>\n",
       "      <td>0.215</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   ID  density  Sugar_content  label  intercept\n",
       "0   1    0.697          0.460      1        1.0\n",
       "1   2    0.774          0.376      1        1.0\n",
       "2   3    0.634          0.264      1        1.0\n",
       "3   4    0.608          0.318      1        1.0\n",
       "4   5    0.556          0.215      1        1.0"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#读入csv文件数据  \n",
    "df = pd.read_csv('../resource/watermelon3.0alpha.csv')\n",
    "df['bias'] = np.ones((df.shape[0],1))  \n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.697 ,  0.46  ,  1.    ],\n",
       "       [ 0.774 ,  0.376 ,  1.    ],\n",
       "       [ 0.634 ,  0.264 ,  1.    ],\n",
       "       [ 0.608 ,  0.318 ,  1.    ],\n",
       "       [ 0.556 ,  0.215 ,  1.    ],\n",
       "       [ 0.403 ,  0.237 ,  1.    ],\n",
       "       [ 0.481 ,  0.149 ,  1.    ],\n",
       "       [ 0.437 ,  0.211 ,  1.    ],\n",
       "       [ 0.666 ,  0.091 ,  1.    ],\n",
       "       [ 0.243 ,  0.0267,  1.    ],\n",
       "       [ 0.245 ,  0.057 ,  1.    ],\n",
       "       [ 0.343 ,  0.099 ,  1.    ],\n",
       "       [ 0.639 ,  0.161 ,  1.    ],\n",
       "       [ 0.657 ,  0.198 ,  1.    ],\n",
       "       [ 0.36  ,  0.37  ,  1.    ],\n",
       "       [ 0.593 ,  0.042 ,  1.    ],\n",
       "       [ 0.719 ,  0.103 ,  1.    ]])"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataMat = np.array(df[['density','Sugar_content','bias']].values[:,:])  \n",
    "dataMat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[ 1],\n",
       "        [ 1],\n",
       "        [ 1],\n",
       "        [ 1],\n",
       "        [ 1],\n",
       "        [ 1],\n",
       "        [ 1],\n",
       "        [ 1],\n",
       "        [-1],\n",
       "        [-1],\n",
       "        [-1],\n",
       "        [-1],\n",
       "        [-1],\n",
       "        [-1],\n",
       "        [-1],\n",
       "        [-1],\n",
       "        [-1]], dtype=int64)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "labelMat = np.mat(df['label'].values[:]).transpose()  \n",
    "labelMat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "def sigmoid(z):  \n",
    "    return 1.0 / (1 + np.exp(-z))  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "def LogisticRegression(dataMat,labelMat):  \n",
    "    m,n = np.shape(dataMat)  \n",
    "    alpha = 0.0001       # 步长\n",
    "    iterations = 500  # 最大迭代次数\n",
    "    weights = np.array(np.array(np.ones((n,1))))  # 初始权重\n",
    "    \n",
    "    fore_error = 9999\n",
    "    # 用梯度上升法更新权重\n",
    "    #for k in range(iterations):   \n",
    "    while True:   \n",
    "        z = np.dot(dataMat,weights)        \n",
    "        error = labelMat - sigmoid(z)\n",
    "        if(np.linalg.norm(error,ord=2) > fore_error):\n",
    "            break\n",
    "        else:\n",
    "            fore_error = np.linalg.norm(error,ord=2)\n",
    "            \n",
    "        weights = weights - alpha * dataMat.transpose() * error\n",
    "        \n",
    "    return weights"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "def DrawResult(weights):  \n",
    "    m = np.shape(dataMat)[0]  \n",
    "    xcord1, ycord1, zcord1= [], [], []\n",
    "    xcord2, ycord2, zcord2= [], [], []\n",
    "    \n",
    "    # 按照类别划分数据点\n",
    "    for i in range(m):  \n",
    "        if labelMat[i]==1:  \n",
    "            xcord1.append(dataMat[i,0])  \n",
    "            ycord1.append(dataMat[i,1]) \n",
    "            zcord1.append(sigmoid(dataMat[i,:] * weights))\n",
    "        else:  \n",
    "            xcord2.append(dataMat[i,0])  \n",
    "            ycord2.append(dataMat[i,1]) \n",
    "            zcord2.append(sigmoid(dataMat[i,:] * weights))\n",
    "    \n",
    "    # 创建三维图表\n",
    "    fig = plt.figure()  \n",
    "    ax = Axes3D(fig)\n",
    "    \n",
    "    # 画出判决平面\n",
    "    x = dataMat[:,0]\n",
    "    y = dataMat[:,1]\n",
    "    X, Y = np.meshgrid(x, y)\n",
    "    z = np.array([0.5 for x,y in zip(np.ravel(X), np.ravel(Y))])\n",
    "    Z = z.reshape(X.shape)    \n",
    "    ax.plot_surface(X, Y, Z, rstride=10, cstride=10, color=(0,0.6,0.6,0.1))\n",
    "    \n",
    "    # 按类别画出数据点\n",
    "    ax.scatter(xcord1,ycord1,zcord1,s=30,c='red',marker='H')  \n",
    "    ax.scatter(xcord2,ycord2,zcord2,s=30,c='green',marker='o') \n",
    "    \n",
    "    ax.set_xlabel('density')  \n",
    "    ax.set_ylabel('Sugar content')\n",
    "    ax.set_zlabel('Label')\n",
    "    plt.title('Gradient ascent logistic regression')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "weights = LogisticRegression(dataMat,labelMat)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n5X8IiHJePLvWUAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1cdf8ebad30>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "DrawResult(weights) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[-4.00462655],\n",
       "        [-4.26747101],\n",
       "        [-4.45594422],\n",
       "        [-4.30265962],\n",
       "        [-4.52722021],\n",
       "        [-4.36971043],\n",
       "        [-4.64329123],\n",
       "        [-4.45785355],\n",
       "        [-4.91278111],\n",
       "        [-4.79227418],\n",
       "        [-4.71733799],\n",
       "        [-4.67703292],\n",
       "        [-4.71855374],\n",
       "        [-4.63743269],\n",
       "        [-4.00621887],\n",
       "        [-4.98739473],\n",
       "        [-4.91795351]])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "z = np.dot(dataMat,weights)  \n",
    "z"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[ 0.5849312 ],\n",
       "        [ 0.35810703],\n",
       "        [ 0.18787266],\n",
       "        [ 0.28851746],\n",
       "        [ 0.13889398],\n",
       "        [ 0.1998274 ],\n",
       "        [ 0.08672972],\n",
       "        [ 0.15589786],\n",
       "        [ 0.03965651],\n",
       "        [ 0.03951005],\n",
       "        [ 0.05214263],\n",
       "        [ 0.06681284],\n",
       "        [ 0.07804283],\n",
       "        [ 0.10554529],\n",
       "        [ 0.4910728 ],\n",
       "        [ 0.02778802],\n",
       "        [ 0.04115665]])"
      ]
     },
     "execution_count": 149,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "h = sigmoid(z)         \n",
    "h"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[ 0.4150688 ],\n",
       "        [ 0.64189297],\n",
       "        [ 0.81212734],\n",
       "        [ 0.71148254],\n",
       "        [ 0.86110602],\n",
       "        [ 0.8001726 ],\n",
       "        [ 0.91327028],\n",
       "        [ 0.84410214],\n",
       "        [-1.03965651],\n",
       "        [-1.03951005],\n",
       "        [-1.05214263],\n",
       "        [-1.06681284],\n",
       "        [-1.07804283],\n",
       "        [-1.10554529],\n",
       "        [-1.4910728 ],\n",
       "        [-1.02778802],\n",
       "        [-1.04115665]])"
      ]
     },
     "execution_count": 150,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "error = labelMat-h\n",
    "error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[-1.46380362],\n",
       "        [ 9.6896038 ],\n",
       "        [-3.09389669]])"
      ]
     },
     "execution_count": 152,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "weights"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "weights = weights + 0.05 * np.dot(dataMat.transpose(),error)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[-1.54059233],\n",
       "        [ 9.69857288],\n",
       "        [-3.29102194]])"
      ]
     },
     "execution_count": 154,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "weights"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 208,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nF4U5tAuFCgdUAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x193bd1cad68>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# -*- coding: cp936 -*-  \n",
    "from numpy import *  \n",
    "import pandas as pd  \n",
    "import matplotlib.pyplot as plt  \n",
    "  \n",
    "#读入csv文件数据  \n",
    "df = pd.read_csv('../resource/watermelon3.0alpha.csv') \n",
    "m,n = np.shape(df.values)  \n",
    "df['norm'] = np.ones((m,1))  \n",
    "dataMat = np.array(df[['norm','density','Sugar_content']].values[:,:])  \n",
    "labelMat = np.mat(df['label'].values[:]).transpose()  \n",
    "  \n",
    "#sigmoid函数  \n",
    "def sigmoid(inX):  \n",
    "    return 1.0 / (1+np.exp(-inX))  \n",
    "  \n",
    "#梯度上升算法  \n",
    "def gradAscent(dataMat,labelMat):  \n",
    "    m,n = np.shape(dataMat)  \n",
    "    alpha = 0.1  \n",
    "    maxCycles = 500  \n",
    "    weights = np.array(ones((n,1)))  \n",
    "  \n",
    "    for k in range(maxCycles):   \n",
    "        a = dot(dataMat,weights)  \n",
    "        h = sigmoid(a)  \n",
    "        error = (labelMat-h)  \n",
    "        weights = weights + alpha * dot(dataMat.transpose(),error)  \n",
    "    return weights  \n",
    "  \n",
    "#画图  \n",
    "def plotBestFit(weights):  \n",
    "    m = np.shape(dataMat)[0]  \n",
    "    xcord1=[]  \n",
    "    ycord1=[]  \n",
    "    xcord2=[]  \n",
    "    ycord2=[]  \n",
    "    for i in range(m):  \n",
    "        if labelMat[i]==1:  \n",
    "            xcord1.append(dataMat[i,1])  \n",
    "            ycord1.append(dataMat[i,2])  \n",
    "        else:  \n",
    "            xcord2.append(dataMat[i,1])  \n",
    "            ycord2.append(dataMat[i,2])  \n",
    "    plt.figure(1)  \n",
    "    ax = plt.subplot(111)  \n",
    "    ax.scatter(xcord1,ycord1,s=30,c='red',marker='s')  \n",
    "    ax.scatter(xcord2,ycord2,s=30,c='green')  \n",
    "    \n",
    "    x = np.arange(0.2,1.0,0.1)  \n",
    "    y = np.array(-(weights[0]+weights[1]*x)/weights[2])[0]\n",
    "    plt.sca(ax)  \n",
    "    plt.plot(x,y)\n",
    "    plt.xlabel('density')  \n",
    "    plt.ylabel('Sugar_content')  \n",
    "    plt.title('gradAscent logistic regression') \n",
    "    plt.show()  \n",
    "\n",
    "\n",
    "weights=gradAscent(dataMat,labelMat)  \n",
    "plotBestFit(weights)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9])"
      ]
     },
     "execution_count": 202,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = np.arange(0.2,1.0,0.1)\n",
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 205,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1.04493814,  1.05464797,  1.0643578 ,  1.07406763,  1.08377746,\n",
       "        1.09348729,  1.10319713,  1.11290696])"
      ]
     },
     "execution_count": 205,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y = np.array((-weights[2]-weights[1]*x)/weights[0])[0]\n",
    "y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
